package com.otdemo.dao;

import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.List;

import com.otdemo.entity.Quiz;
import com.otdemo.entity.Stu;
import com.otdemo.util.DBUtil;

/**
 * 对用户类进行增删改查
 *
 * @author LEI
 */
public class QuizDao extends DBUtil {

    //全查
    public List<Quiz> findAll() {
//		1. 声明一个集合，存放查到的数据
        List<Quiz> us = new ArrayList<Quiz>();
//		2. 写明查询指令
        String sql = "select * from tb_Quiz";
//		3. 打开数据库
        try {
            open_db();
//			把链接和指令给ps去执行
            ps = con.prepareStatement(sql);
//			ps执行查询，查询结果放到resultSet结果集里
            rs = ps.executeQuery();
//			循环解析数据，把数据放在准备好的集合里
            while (rs.next()) {
//				循环内部声明一个临时变量User类，用来保存每次获取到的数据
                Quiz u = new Quiz();
//				把每次获取到的值，存到这个临时变量里
                u.setqId(rs.getInt("q_id"));
                u.setqName(rs.getString("q_name"));
                u.setStartTime(rs.getTimestamp(3));        //考试开始时间
                u.setEndTime(rs.getTimestamp(4));        //考试结束时间
                u.setpId(rs.getInt(5));                    //关联的试卷
                u.setStatus(rs.getBoolean(6));            //考试状态（进行中，未开始）
//				每次临时变量的值装满后，就把临时变量，装到准备好的集合里
                us.add(u);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
//			无论如何都要关闭数据库
            close_db();
        }
//		返回装满数据的集合
        return us;
    }

    //单查
    public Quiz findById(int id) {
//		1. 声明一个对象，存放查到的数据
        Quiz u = new Quiz();
//		2. 写明查询指令
        String sql = "select * from tb_Quiz where q_id=?";
//		3. 打开数据库
        try {
            open_db();
//			把链接和指令给ps去执行
            ps = con.prepareStatement(sql);
//			添加参数
            ps.setInt(1, id);
//			ps执行查询，查询结果放到resultSet结果集里
            rs = ps.executeQuery();
//			循环解析数据，把数据放在准备好的集合里
            while (rs.next()) {
//				把获取到的值，存到这个临时变量里
                u.setqId(rs.getInt("q_id"));
                u.setqName(rs.getString("q_name"));
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
//			无论如何都要关闭数据库
            close_db();
        }
//		返回装满数据的集合
        return u;
    }

    //添加
    public boolean add(Quiz u) {
//		1. 声明一个变量，存放添加结果
        int result = 0;
//		2. 写明添加指令
        String sql = "insert into tb_Quiz values(null, ?,?,?,?,?)";
//		3. 打开数据库
        try {
            open_db();
//			把链接和指令给ps去执行
            ps = con.prepareStatement(sql);
//			执行查询之前，先给sql问号赋值
            ps.setString(1, u.getqName());
            ps.setTimestamp(2, u.getStartTime());
            ps.setTimestamp(3, u.getEndTime());
            ps.setInt(4, u.getpId());
            ps.setBoolean(5, u.isStatus());
//			ps执行添加，添加结果放到resultSet变量里
            result = ps.executeUpdate();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
//			无论如何都要关闭数据库
            close_db();
        }
//		返回添加结果是否大于0
        return result > 0;
    }

    //修改
    public boolean modify(Quiz u) {
//		1. 声明一个变量，存放添加结果
        int result = 0;
//		2. 写明修改指令
        String sql = "update tb_Quiz set q_name=? where q_id=?";
//		3. 打开数据库
        try {
            open_db();
//			把链接和指令给ps去执行
            ps = con.prepareStatement(sql);
//			执行查询之前，先给sql问号赋值
            ps.setString(1, u.getqName());
            ps.setInt(2, u.getqId());
//			ps执行修改，添加结果放到resultSet变量里
            result = ps.executeUpdate();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
//			无论如何都要关闭数据库
            close_db();
        }
//		返回修改结果是否大于0
        return result > 0;
    }

    //删除
    public boolean remove(int id) {
//		1. 声明一个变量，存放删除结果
        int result = 0;
//		2. 写明删除指令
        String sql = "delete from tb_Quiz where q_id=?";
//		3. 打开数据库
        try {
            open_db();
//			把链接和指令给ps去执行
            ps = con.prepareStatement(sql);
//			执行查询之前，先给sql问号赋值
            ps.setInt(1, id);
//			ps执行修改，添加结果放到resultSet变量里
            result = ps.executeUpdate();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
//			无论如何都要关闭数据库
            close_db();
        }
//		返回删除结果是否大于0
        return result > 0;
    }


}
